import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class Panel extends JPanel {
    private final int ILOSC_KOLUMN_TF = 7;
    private JTextField pierwszaLiczbaTF;
    private JTextField drugaLiczbaTF;
    private JComboBox<Dzialanie> listaRozwijana;
    private Dzialanie wybraneDzialanie = Dzialanie.dodawanie;


    public Panel() {
        ustawPanel();
        ustawKomponenty();
    }

    public void ustawPanel() {
        setLayout(new GridLayout(4, 2, 10, 10));
    }

    public void ustawKomponenty() {
        JLabel etykietaPierwsza = new JLabel("Pierwsza liczba: ");
        pierwszaLiczbaTF = new JTextField(ILOSC_KOLUMN_TF);
        JLabel etykietaDruga = new JLabel("Druga liczba: ");
        drugaLiczbaTF = new JTextField(ILOSC_KOLUMN_TF);

        Dzialanie[] tablicaDzialan = Dzialanie.values();
        listaRozwijana = new JComboBox<Dzialanie>(tablicaDzialan);
        listaRozwijana.addItemListener(new SluchaczListyRozwijanej());
        JButton obliczBtn = new JButton("Oblicz");

        obliczBtn.addActionListener(new SluchaczPrzyciskuOblicz());

        add(etykietaPierwsza);
        add(pierwszaLiczbaTF);
        add(etykietaDruga);
        add(drugaLiczbaTF);
        add(new JLabel());
        add(listaRozwijana);
        add(new JLabel());
        add(obliczBtn);
    }

    public double obliczWynik(double pierwszaLiczba, double drugaLiczba) {
        switch (wybraneDzialanie) {
            case dodawanie:
                return pierwszaLiczba + drugaLiczba;
            case odejmowanie:
                return pierwszaLiczba - drugaLiczba;
            case mnożenie:
                return pierwszaLiczba * drugaLiczba;
            case dzielenie:
                return pierwszaLiczba / drugaLiczba;
            default:
                throw new UnsupportedOperationException();
        }
    }

    class SluchaczPrzyciskuOblicz implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                // konwersja tekstu na double
                double pierwszaLiczba = Double.parseDouble(pierwszaLiczbaTF.getText());
                double drugaLiczba = Double.parseDouble(drugaLiczbaTF.getText());
                // obliczenie i ustawienie wyniku
                double wynik = obliczWynik(pierwszaLiczba, drugaLiczba);

                JOptionPane.showMessageDialog(
                        Panel.this,
                        "Twój wynik to:  " + wynik,
                        "Wynik",
                        JOptionPane.INFORMATION_MESSAGE);

            } catch (NumberFormatException e1) {
                JOptionPane.showMessageDialog(
                        Panel.this,              // komponent nad którym ma wyświetlić okno
                        "Wprowadzono niewłasciwe dane",
                        "Błąd",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    class SluchaczListyRozwijanej implements ItemListener {
        @Override
        public void itemStateChanged(ItemEvent e) {
            int wybranyIndex = listaRozwijana.getSelectedIndex();            // pobieramy zaznaczony indeks z listy rozwijanej
            wybraneDzialanie = listaRozwijana.getModel().getElementAt(wybranyIndex);   //  pobieranie elementu o indeksie wybrany indeks z modelu
        }
    }
}
